﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EntregaSO
{
    public class AscensorFSCAN : Ascensor
    {

        private SortedList<int, SolicitudAscensor> SiguientesPisosAux;

        public AscensorFSCAN(int pisosEdificio, Planificador planificador, string nombre)
            : base(pisosEdificio, planificador, nombre)
        { }

        /// <summary>
        /// Llamada al ascensor desde afuera
        /// </summary>
        /// <param name="piso">Piso en el cual se origina la llamada</param>
        public override void LlamarAscensor(SolicitudAscensor solicitud)
        {
            lock (this)
            {
                this.SiguientesPisosAux.Add(solicitud.PisoOrigen, solicitud);
            }
        }
        /// <summary>
        /// Fija el sentido en el cual el ascensor se debe mover
        /// </summary>
        protected override void FijarSentido()
        {
            if (this.SiguientesPisos.Count != 0)
            {
                if (this.SiguientesPisos.First().Key > this.pisoActual)
                {
                    this.sentido = SentidoAscensor.Sube;
                }
                else
                {
                    this.sentido = SentidoAscensor.Baja;
                }
                //t.Start();
            }
            else
            {
                //si tengo pedidos en la lista auxiliar las intercambio, de lo contrario me quedo quieto
                if (this.SiguientesPisosAux.Count > 0)
                {
                    this.SiguientesPisos = this.SiguientesPisosAux;
                    this.SiguientesPisosAux = new SortedList<int, SolicitudAscensor>();
                    //t.Start();
                }
                else
                {
                    this.sentido = SentidoAscensor.Quieto;
                }
                //t.Stop();
            }
        }
        
    }
}
